全球共有10多个国家和地区1000多个平台,20万+商户使用
C#过滤器(Filter)
作者: 陈发林 发布时间: 2024-03-09 276 分类专栏: 后端开发
一.概述
过滤器(Filters)是用于在ASP.NET Core应用程序中执行全局或局部的操作的组件。这些过滤器可以用于处理请求前、请求后、异常处理等不同的阶段。
在 ASP.NET Core 中,过滤器是一种可以在特定的阶段处理请求的方法。它们在一个 action 方法执行之前或之后运行,可以用来处理错误、指定缓存设置、验证请求和响应,等等。
二.ASP.NET Core 提供的五种过滤器
1.授权过滤器(Authorization filters):处理授权逻辑。在过滤器管道中第一个执行,通常用于验证当前请求的合法性,不合法后面的管道会直接跳过。它们只有一个Before方法,不像其它大多数过滤器支持前置阶段方法和后置阶段方法。注意,您不要在授权过滤器中抛出异常,因为没有任何代码来处理异常(异常过滤器不处理它们)。
2.资源过滤器(Resource filters):在模型绑定之前和之后运行,通常用于缓存。
3.操作过滤器(Action filters):在 action 执行之前和之后运行。
4.异常过滤器(Exception filters):处理控制器或 action 中引发的异常。
5.结果过滤器(Result filters):在action 的结果执行之前和之后运行。
三.运行顺序(生命周期)
注:黃色箭头是正常情況流程;灰色箭头是异常处理流程;
四.使用
1.代码案例
public class GlobalFiler: Attribute,IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
context.Result = new JsonResult("全局权限设置");
}
}
public class MyFilter : Attribute,IActionFilter,IOrderedFilter
{
public int Order { get; set; }
public void OnActionExecuted(ActionExecutedContext context)
{
}
public void OnActionExecuting(ActionExecutingContext context)
{
}
}
//ActionFilterAttribute继承了Attribute、IActionFilter、IOrderedFilter等
public class MyFilter2 : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
//如果失败,页面提示
context.Result = new JsonResult("MyFilter2设置,无权限访问");
}
}
2.过滤器注册,分为两种:全局注册和用Attribute区域注册,用在特定Action上。
1).全局注册Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(config => config.Filters.Add(new GlobalFiler()));
}
2).区域注册
[Route("api/[controller]")]
[MyFilter(Order = 1)]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
[MyFilter2(Order = 0)]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
陈发林
小当家ISV,重庆APP开发,小程序开发,软件系统开发 地址:重庆市南岸区南坪万达广场写字楼2栋19-6 联系电话:023-81361879
ICP备案号:渝ICP备15003473-1 增值电信业务许可证: 渝B2-15003473 渝公网安备 50010802005103号
友情链接: 小当家点餐收银系统 MagicShop商城 重庆微信营销 重庆智能家居 重庆红岭医院
重庆小当家互联网信息技术有限公司